压缩纹理
在 Kanzi 中,您可以对压缩纹理以及预压缩过的 DXT 纹理使用 ASTC、ATC、ETC 和 PVRTC 算法。
如果您的应用程序尝试从内存读取的数据超过内存能够处理的量,则读取内存将成为您应用程序的性能瓶颈。如果您的目标硬件支持上述任何压缩方法,则可以使用纹理压缩来减少内存带宽并提高应用程序的性能。您可以使用现代化 ASTC 算法实现相对来说最小的文件和最佳图像质量。
压缩级别的最佳表现取决于您的目标设备。高压缩级别使用的 CPU 多,但占用内存带宽少,而低压缩级别使用的 CPU 少,但占用内存带宽多。
Kanzi 应用程序会将压缩的纹理直接发送到 GPU,以减少互换数据量并且运行时(例如加载 libJPEG 或 libPNG)无需在 CPU 端执行预处理。
例如,一个未解包的 256x256 像素的 RGB 纹理将使用 196 kb 内存(256 * 256 * 3 字节)。压缩时:
- 使用 ASTC,如果块大小为 8 x 8,纹理使用 16 kb (((256/8)^2)*16)/1024。如果块大小为 12 x 12,纹理使用 8 kb。
- 使用 ETC,纹理使用 32 kb (256 * 256 / 2)。
如果您的目标硬件不支持上述任何压缩算法,则在某些情况下,raw 图像格式的传输速度会比任何压缩算法都快。处理单个的小型图像时尤其如此。
如果目标硬件不支持所选的纹理压缩算法,您在目标设备上运行Kanzi 应用程序时,Kanzi 会向日志打印警告消息。Kanzi 将您使用目标硬件不支持的压缩纹理格式的表面涂黑。
由于 OpenGL 期望 DXT 纹理数据首先在最后一行,因此垂直翻转压缩 DXT 文件。请注意,您可以在 Kanzi 应用程序中使用 DXT 文件,但由于 GPU 限制,在 Win32 仿真中不支持 DXT 文件。请参阅 导入图像。
Kanzi Studio 会在您创建 kzb 文件时压缩图像,但您也可以手动压缩图像。请参阅 手动预处理图像。
建议
当 Kanzi Studio 压缩图像时,它默认使用您的计算机上的可用 CPU 资源。要在 Kanzi Studio 压缩多个图像的同时为其他应用程序释放 CPU 资源,请选择 > 用户首选项 (User Preferences) 并在高级 (Advanced) 选项卡中调整要并行压缩的图像 (Images to compress in parallel) 设置的值。
要并行压缩的图像 (Images to compress in parallel) 设置限制压缩多张图像时 Kanzi Studio 使用的逻辑内核的数量。您的计算机中的逻辑内核数量决定最大 (Maximum) 值。
使用 ASTC 算法
如果您的目标硬件支持 ASTC 算法,请使用 ASTC 算法以获得最佳效果。ASTC 算法与旧的 ATC、ETC 和 PVRTC 算法相比,创建的文件更小,图像质量更佳。
要使用 ASTC 算法:
- 在Kanzi Studio 的 素材库 (Library) 中,选择 资源文件 (Resource Files) > 图像 (Images),然后选择您要应用压缩的图像。
- 在属性 (Properties) 中,将目标格式 (Target Format) 属性设置为ASTC。
- 在属性 (Properties) 中设置:
- ASTC 块大小 (ASTC Block Size) 为您想要用于压缩图像的块大小,单位为像素。
在 ASTC 中,压缩块的大小始终为 128 位。块的像素越少,压缩后图像的质量越好,但生成的文件会较大。每个块 4x4 像素生成的文件最大,是看起来效果最好的受支持值,而每个块 12x12 像素则会生成最小文件输出。
- ASTC 压缩速度 (ASTC Compression Speed) 为压缩图像耗用的时间量。
非常快 (Very fast)、快速 (Fast)、Medium (中等)、全面 (Thorough) 和穷尽 (Exhaustive) 是指压缩图像耗用的时间量和图像质量,而不是压缩后图像的文件大小或解压缩时间。- 非常快 (Very fast) 耗用最少时间来压缩图像。
- 穷尽 (Exhaustive) 耗用最多时间来压缩图像,获得的质量最佳。
若要速度快并且质量良好,则使用快速压缩,若要获得更好的质量,则使用较慢的压缩速度。
例如,为获得最佳的最终结果,请使用穷尽 (Exhaustive)。在开发期间,非常快 (Very fast) 最为有用。
- ASTC sRGB 变体 (ASTC sRGB Variant) 为:
- False 以为图像格式使用线性空间。这属于最常用情况。
- True 以为图像格式使用 sRGB 颜色空间。这会在压缩前将图像从 sRGB 颜色空间转换为线性空间,然后在 GPU 中解压缩之后在转换回 sRGB。
建议If Kanzi Studio flips an image that you use as the face of a 环境纹理贴图 (Cube-map Texture), in the 属性 (Properties) set the Flip Before Compressing property to True.
Kanzi Studio does this automatically for dds images that you import to your project and set to use ASTC compression.
See 使用环境纹理贴图.
使用 ATC 算法
要使用 ATC 算法:
- 在Kanzi Studio 的 素材库 (Library) 中,选择 资源文件 (Resource Files) > 图像 (Images),然后选择您要应用压缩的图像。
- 在属性 (Properties) 中,将目标格式 (Target Format) 属性设置为ATC。
- 将ATC 压缩方案 (ATC Compression Scheme) 属性设置为:
- 显式阿尔法 (Explicit alpha)。RGBA 图像,图像的每个像素都具有明确的阿尔法分量,数据压缩至 pixel_count/1,实现 1:4 压缩比。
- 插值阿尔法 (Interpolated alpha)。RGBA 图像,图像之间插值阿尔法分量,数据压缩至 pixel_count/1,实现 1:4 压缩比。
- 无阿尔法 (No alpha)。RGB 图像,数据压缩至 pixel_count/2,实现 1:6 压缩比。
使用 ETC 算法
要使用 ETC 算法:
- 在Kanzi Studio 的 素材库 (Library) 中,选择 资源文件 (Resource Files) > 图像 (Images),然后选择您要应用压缩的图像。
- 在属性 (Properties) 中,将目标格式 (Target Format) 属性设置为您想要使用的 ETC 压缩:
- ETC 快速 (Fast)、中等 (Medium) 和缓慢 (Slow) 是指图像的压缩速度和质量,而非最终的大小或解压缩时间。缓慢 (Slow) 可返回最佳的图像质量。
为取得使用 ETC1 压缩方案的最佳最终结果,请使用ETC缓慢感知 (slow perceptual)。
- ETC 感知 (Perceptual) 是指根据人类视觉系统对于颜色的亲和性,侧重于绿色通道而不是红色和蓝色通道。
开发期间使用 ETC1 压缩方案时,最常用的是 ETC 快速 (fast)。 - ETC2 以使用 ETC2 压缩方案。
要设置 ETC2 压缩质量,使用 工作 (Effort) 属性。
工作 (Effort) 值对应于图像的压缩时间和质量,而不是最终的大小或解压缩时间。要获得最佳图像质量结果,将工作 (Effort) 设置为 100。在开发期间,0 是最有用的设置,因为压缩时间最短。
- 具有阿尔法通道的 ETC2 以对具有阿尔法通道的图像使用 ETC2 压缩方案
使用 PVRTC 算法
PVRTC 算法最适合照片级真实感纹理。 Kanzi 支持根据 PVRTC1 和 PVRTC2 方案进行的 PVRTC 压缩。 PVRTC2 的压缩质量要高于 PVRTC1,对于需要急剧阿尔法迁移的纹理尤其如此,但并非所有 PowerVR 硬件都支持。此外,只有 Imagination Technologies 硬件或者使用开发模拟器的桌面平台支持 PVRTC 压缩。
注
使用 PVRTC 压缩纹理时,要获得正确的结果,纹理必须是正方形纹理,且其大小必须是二的幂。
要使用 PVRTC 算法:
- 在Kanzi Studio 的 素材库 (Library) 中,选择 资源文件 (Resource Files) > 图像 (Images),然后选择您要应用压缩的图像。
- 在属性 (Properties) 中,将目标格式 (Target Format) 属性设置为PVRTC。
- 在属性 (Properties) 中设置:
- PVRTC 位深 (PVRTC Bit Depth) 为以下任一设置:
- 2 位/像素 (2 bits/pixel),将产生更小、质量更低的纹理。
- 4 位/像素 (4 bits/pixel),将产生更大、质量更高的纹理。使用 4 位/像素 (4 bits/pixel) 位深时,纹理文件大小是 2 位/像素 (2 bits/pixel) 纹理的两倍,但会产生更高质量的纹理。
- PVRTC 编码质量 (PVRTC Encoding Quality) 为最快 (Fastest)、快速 (Fast)、正常 (Normal)、高 (High) 或最佳 (Best)。
这些值对应于图像的压缩时间和质量,而不是最终的大小或解压缩时间。要获得最佳的最终结果,请使用最佳 (Best)。在开发期间,最快 (Fastest) 最为有用。 - PVRTC 压缩方案 (PVRTC Compression Scheme) 为 PVRTC1 或 PVRTC2。这两种方案都支持 RGB 和 RGBA 纹理。Kanzi 会自动对包含阿尔法通道的所有图像使用 RGBA。
- 预乘阿尔法 (Premultiply Alpha)。如果要将阿尔法通道预乘到具有阿尔法通道的图像的颜色通道,则选择 True,否则,选则 False。如果想要使用 Kanzi Studio 工程属性使用默认预乘阿尔法 (Use Premultiplied Alpha by Default)控制属性的值,则选择工程默认值 (Project default)。请参阅 配置 Kanzi Studio 工程。
手动预处理图像
Kanzi Studio 会在您创建 kzb 文件时压缩图像,但您也可以手动压缩图像。要手动处理图像,在素材库 (Library) > 资源文件 (Resource Files) > 图像 (Images) 中右键点击一张或多张您要处理的图像,然后选择预处理图像 (Preprocess images)。
建议
当 Kanzi Studio 压缩图像时,它默认使用您的计算机上的可用 CPU 资源。要在 Kanzi Studio 压缩多个图像的同时为其他应用程序释放 CPU 资源,请选择 > 用户首选项 (User Preferences) 并在高级 (Advanced) 选项卡中调整要并行压缩的图像 (Images to compress in parallel) 设置的值。
要并行压缩的图像 (Images to compress in parallel) 设置限制压缩多张图像时 Kanzi Studio 使用的逻辑内核的数量。您的计算机中的逻辑内核数量决定最大 (Maximum) 值。
另请参阅
调整数据大小
并行加载资源
使用 mipmap
过滤纹理
排除应用程序的性能问题
图像和纹理最佳实践
最佳实践
图像
使用环境纹理贴图
配置 Kanzi Studio 工程
打开导航